package jschool.manejadores;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import jschool.entidades.Asistencia;
import jschool.persistencia.Conexion;

public class ManejadorDeAsistencia {
	private ArrayList<Asistencia> asistencias = null;
	private static ManejadorDeAsistencia instancia = null;
	private Conexion conexion;
	private ResultSet rs = null;
	private PreparedStatement stmt = null;
	
	private ManejadorDeAsistencia(){
		conexion = Conexion.getInstancia();
	}
	
	public static ManejadorDeAsistencia getInstancia(){
		if (instancia == null) {
			instancia = new ManejadorDeAsistencia();
		}
		return instancia;
	}
	
	public ArrayList<Asistencia> getAsistencia(){
		asistencias = new ArrayList<Asistencia>();
		try{
			String sql = "SELECT * FROM Asistencia";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			rs = conexion.hacerConsulta(sql);
			while (rs.next()){
				Asistencia asistencia = new Asistencia(rs.getInt(1), rs.getString(2), rs.getString(3));
				asistencias.add(asistencia);
			}
			
		}catch(SQLException e){
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Listando Asistencia","Error",JOptionPane.ERROR_MESSAGE);
			return null;
		}
		return asistencias;
	}
	
	public int agregarAsistencia(Asistencia asistencia){
		int fila = 0;
		try{
			String sql = "INSERT INTO Asistencia (idEstudiante, dia, estado) VALUES(?,?,?)";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, asistencia.getIdEstudiante());
			stmt.setString(2, asistencia.getDia());
			stmt.setString(3, asistencia.getEstado());
			fila = stmt.executeUpdate();
		}catch (SQLException e){
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Agregando Asistencia","Error",JOptionPane.ERROR_MESSAGE);
			return 0;
		}finally{
			try{
				stmt.close();
			}catch(SQLException e){
				e.printStackTrace();
			}
		}
		return fila;
	}
	
	public int eliminarAsistencia(int id){
		int fila = 0;
		try{
			String sql = "DELETE FROM Asistencia WHERE idEstudiante = ?";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, id);
			fila = stmt.executeUpdate();
			stmt.close();
		}catch(SQLException e){
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Borrando Asistencia","Error",JOptionPane.ERROR_MESSAGE);
			return 0;
		}
		return fila;
	}
	
	public int modificarAsistencia(Asistencia asistencia, int id){
		int fila = 0;
		try{
			String sql = "UPDATE Asistencia SET idEstudiante = ?, dia = ?, estado = ? WHERE idEstudiante = ?";
			stmt = (PreparedStatement)conexion.hacerEnunciado(sql);
			stmt.setInt(1, asistencia.getIdEstudiante());
			stmt.setString(2, asistencia.getDia());
			stmt.setString(3, asistencia.getEstado());
			stmt.setInt(4, id);
			fila = stmt.executeUpdate();
			stmt.close();
		}catch (SQLException e){
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Modificando Asistencia","Error",JOptionPane.ERROR_MESSAGE);
			return 0;
		}
		return fila;		
	}
}
